0%

Unity中使用sLua的 超丶简单基础教程(三)

前言

Unity中使用sLua的 超丶简单基础教程(一)

Unity中使用sLua的 超丶简单基础教程(二)

这一篇展示一个用SLua这个库 在Lua中执行Unity的生命周期方法,直接上代码:

正文

在创建一个新的场景,一个新的CreateEmpty把C#脚本挂上去代码如下:

LuaManager.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using SLua;

public class LuaManager : MonoBehaviour {

private LuaFunction _luaStart = null;
private LuaFunction _luaUpdate = null;
private LuaFunction _luaLateUpdate = null;
private LuaFunction _luaFixedUpdate = null;
private LuaFunction _luaAwake = null;
private LuaFunction _luaOnDisable = null;
private LuaFunction _luaOnDestroy = null;


private void Awake()
{
LuaSvr svr = new LuaSvr();// 如果不先进行某个LuaSvr的初始化的话,下面的mianState会爆一个为null的错误..
LuaSvr.mainState.loaderDelegate += LuaReourcesFileLoader;
svr.init(null, () => // 如果不用init方法初始化的话,在Lua中是不能import的
{
svr.start("Main");
_luaAwake = LuaSvr.mainState.getFunction("Awake");
_luaStart = LuaSvr.mainState.getFunction("Start");
_luaFixedUpdate = LuaSvr.mainState.getFunction("FixedUpdate");
_luaUpdate = LuaSvr.mainState.getFunction("Update");
_luaLateUpdate = LuaSvr.mainState.getFunction("LateUpdate");
_luaOnDisable = LuaSvr.mainState.getFunction("OnDisable");
_luaOnDestroy = LuaSvr.mainState.getFunction("OnDestroy");
});
if(_luaAwake != null){
_luaAwake.call();
}
}

private void Start ()
{

if(_luaStart != null)
{
_luaStart.call();
}
}

// SLua Loader代理方法
private static byte[] LuaReourcesFileLoader(string strFile)
{
// 这里为了测试就不先判断为空,开发的时候再加上
string filename = Application.dataPath + "/Scripts/Lua/" + strFile.Replace('.', '/') + ".txt";
return File.ReadAllBytes(filename);
}

void FixedUpdate()
{
if(_luaFixedUpdate != null)
{
_luaFixedUpdate.call();
}
}
void Update()
{
if(_luaUpdate != null)
{
_luaUpdate.call();
}
}
void LateUpdate()
{
if(_luaLateUpdate != null)
{
_luaLateUpdate.call();
}
}
void OnDisable()
{
if(_luaOnDisable != null)
{
_luaOnDisable.call();
}
}
void OnDestroy()
{
if(_luaOnDestroy == null)
{
_luaOnDestroy.call();
}
}
}

Main.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import "UnityEngine"

-- main方法,入口函数
function main()
print("Lua创建了一个Cube")
local cube = GameObject.CreatePrimitive(PrimitiveType.Cube)
end

function Awake()
print("Awake")
end

function Start()
print("Start")
end

function FixedUpdate()
print("FixedUpdate")
end

function Update()
print("luaUpdate")
end

function LateUpdate()
print("LateUpdate")
end

function OnDisable()
print("OnDisable")
end

function OnDestroy()
print("OnDestroy")
end

效果图

其他

之后总结几篇SLua中调用Prebab/UI等…

本篇教程很基础,如果有精力会将之后学习到的知识都整理成博客分享给大家~